home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 June
/
EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso
/
earcd
/
utilsys
/
rss14gmd.lha
/
RSys_1.4gmd
/
C
/
FindFile.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-05-04
|
19KB
|
766 lines
/*
***************************************************************************
*
* Datei:
* RSysFindFile.c
*
* Inhalt:
*
* --- Globale Routinen ---
*
* void FindFile ( void );
* void HandleFindFileKeys ( ULONG code );
* void MakeDevEntry ( LIST *list , char *str );
*
* --- Lokale Routinen ---
*
* static BOOL ClickedGadget ( void );
* static int OpenFindFileWindow ( void );
* static void *MyDevAllocRem ( long size );
* static void *MyFileAllocRem ( long size );
* static void HandleFindFileGadgets ( APTR object , ULONG code );
* static void MakeDevList ( void );
* static void MakeFileEntry ( char *str );
* static void refreshdevlists ( void );
* static void SaveFoundFiles ( void );
* static void SearchFile ( char *name );
*
* Bemerkungen:
* Disk-Format-Untersützung und Dateisuchroutinen.
*
* Erstellungsdatum:
* 07-Jul-93 Rolf Böhme
*
* Änderungen:
* 07-Jul-93 Rolf Böhme Erstellung
*
***************************************************************************
*/
#include "RSys.h"
#include "protos.h"
static int breakitx = FALSE;
static WINDOW *FindFileWnd = NULL;
static GADGET *FindFileGList = NULL;
static UWORD FindFileZoom[4];
static GADGET *FindFileGadgets[10];
static UWORD FindFileLeft = 153;
static UWORD FindFileTop = 27;
static UWORD FindFileWidth = 330;
static UWORD FindFileHeight = 200;
static UBYTE FindFileWdt[100]; /*GMD */
static UBYTE *CaseCYGad0Labels[] =
{
(UBYTE *) "No case sense",
(UBYTE *) "Case sense",
NULL
};
static UBYTE *DirFileCYGad0Labels[] =
{
(UBYTE *) "Dirs + Files",
(UBYTE *) "Files",
(UBYTE *) "Directories",
NULL};
static LIST DevList;
static LIST SelDevList, FoundList;
REMEMBER *DevKey = NULL;
static REMEMBER *FileKey = NULL;
static char pat[PATTERNLEN], parsepat[PARSEPATLEN];
static int match_case = NO_CASE, match_type = DF;
static UWORD FindFileGTypes[] =
{
LISTVIEW_KIND,
LISTVIEW_KIND,
STRING_KIND,
BUTTON_KIND,
LISTVIEW_KIND,
BUTTON_KIND,
BUTTON_KIND,
BUTTON_KIND,
CYCLE_KIND,
CYCLE_KIND
};
static NEWGADGET FindFileNGad[] =
{
4, 17, 157, 60, (UBYTE *) "Devices", NULL, GD_DeviceLV, PLACETEXT_ABOVE, NULL, NULL,
168, 17, 157, 60, (UBYTE *) "Selected Devices", NULL, GD_SelDevLV, PLACETEXT_ABOVE | NG_HIGHLABEL, NULL, NULL,
74, 113, 87, 13, (UBYTE *) "Pattern", NULL, GD_PatternGad, PLACETEXT_LEFT, NULL, NULL,
4, 97, 157, 13, (UBYTE *) "Start/Stop Search", NULL, GD_StartStopGad, PLACETEXT_IN, NULL, NULL,
4, 144, 321, 52, (UBYTE *) "Found files/dirs", NULL, GD_FoundLV, PLACETEXT_ABOVE | NG_HIGHLABEL, NULL, NULL,
168, 97, 157, 13, (UBYTE *) "Save found list", NULL, GD_SaveFoundListGad, PLACETEXT_IN, NULL, NULL,
168, 81, 77, 13, (UBYTE *) "Sel all", NULL, GD_AllGad, PLACETEXT_IN, NULL, NULL,
248, 81, 77, 13, (UBYTE *) "Sel none", NULL, GD_NoneGad, PLACETEXT_IN, NULL, NULL,
4, 81, 157, 13, NULL, NULL, GD_CaseCYGad, 0, NULL, NULL,
168, 113, 157, 13, NULL, NULL, GD_DirFileCYGad, 0, NULL, NULL
};
static ULONG *FindFileGTags[] =
{
(ULONG *) (GTLV_Labels), (ULONG *) & DevList, (ULONG *) (TAG_DONE),
(ULONG *) (GTLV_Labels), (ULONG *) & SelDevList, (ULONG *) (TAG_DONE),
(ULONG *) (GTST_MaxChars), (ULONG *) 256, (ULONG *) (TAG_DONE),
(ULONG *) (GA_Disabled), (ULONG *) TRUE, (ULONG *) (TAG_DONE),
(ULONG *) (GTLV_Labels), (ULONG *) & FoundList, (ULONG *) (GTLV_ReadOnly), (ULONG *) TRUE, (ULONG *) (TAG_DONE),
(ULONG *) (TAG_DONE),
(ULONG *) (TAG_DONE),
(ULONG *) (TAG_DONE),
(ULONG *) (GTCY_Labels), (ULONG *) & CaseCYGad0Labels[0], (ULONG *) (TAG_DONE),
(ULONG *) (GTCY_Labels), (ULONG *) & DirFileCYGad0Labels[0], (ULONG *) (TAG_DONE)
};
static int gl[] =
{GD_DeviceLV - GD_DeviceLV,
GD_SelDevLV - GD_DeviceLV,
GD_PatternGad - GD_DeviceLV,
GD_FoundLV - GD_DeviceLV};
/*
* OpenFindFileWindow() öffnet ein Window mit Gadgets, mit
* denen die Auswahl- und Suchkriterien eingegeben werden
* können
*/
static int
OpenFindFileWindow (void)
{
NEWGADGET ng;
GADGET *g;
UWORD lc, tc;
UWORD wleft = FindFileLeft, wtop = FindFileTop, ww, wh;
DPOS;
AdjustWindowDimensions (Scr, FindFileLeft, FindFileTop, FindFileWidth, FindFileHeight,
&wleft, &wtop, &ww, &wh);
if (!(g = CreateContext (&FindFileGList)))
return 1L;
for (lc = 0, tc = 0; lc < FindFile_CNT; lc++)
{
CopyMem ((char *) &FindFileNGad[lc], (char *) &ng, (long) sizeof (NEWGADGET));
ng.ng_VisualInfo = VisualInfo;
ng.ng_TextAttr = Font;
ng.ng_LeftEdge = OffX + ComputeX (ng.ng_LeftEdge);
ng.ng_TopEdge = OffY + ComputeY (ng.ng_TopEdge);
ng.ng_Width = ComputeX (ng.ng_Width);
ng.ng_Height = ComputeY (ng.ng_Height);
FindFileGadgets[lc] = g = CreateGadgetA ((ULONG) FindFileGTypes[lc], g, &ng, (TAGITEM *) & FindFileGTags[tc]);
makelabelvisible (FindFileGadgets[lc]);
while (FindFileGTags[tc])
tc += 2;
tc++;
if (NOT g)
return 2L;
}
strcpy (FindFileWdt, get_vers (" - Find File")); /*GMD */
FindFileZoom[2] = TextLength (&Scr->RastPort, (UBYTE *) FindFileWdt,
strlen ((char *) FindFileWdt)) + 80;
FindFileZoom[0] = FindFileZoom[1] = 0;
FindFileZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
if (!(FindFileWnd = OpenWindowTags (NULL,
WA_Left, wleft,
WA_Top, wtop,
WA_Width, ww,
WA_Height, wh,
WA_IDCMP, IDCMP_VANILLAKEY |
LISTVIEWIDCMP |
STRINGIDCMP |
BUTTONIDCMP |
CYCLEIDCMP |
IDCMP_CLOSEWINDOW |
IDCMP_CHANGEWINDOW |
IDCMP_REFRESHWINDOW,
WA_Flags, WFLG_DRAGBAR |
WFLG_DEPTHGADGET |
WFLG_CLOSEGADGET |
WFLG_RMBTRAP |
WFLG_ACTIVATE |
WFLG_SMART_REFRESH,
WA_Title, FindFileWdt,
WA_Zoom, FindFileZoom,
WA_PubScreenFallBack, TRUE,
WA_PubScreen, Scr,
TAG_DONE)))
return 4L;
FindFileZoom[0] = FindFileWnd->LeftEdge;
FindFileZoom[1] = FindFileWnd->TopEdge;
FindFileZoom[2] = FindFileWnd->Width;
FindFileZoom[3] = FindFileWnd->Height;
RefreshRastPort (FindFileWnd, FindFileGadgets, gl, 4, FALSE, FindFileGList);
return NULL;
}
/*
* MyDevAllocRem() reserviert Speicher aus einer Remember-Liste
* für die Verzeichnis-Einträge
*/
static void *
MyDevAllocRem (long size)
{
void *ptr = (void *) AllocRemember (DEVKEY, size, MEMF_CLEAR | MEMF_ANY);
if (NOT (ptr))
{
ErrorHandle ("Device list", MEMORY_ERR, ALLOC_FAIL, NO_KILL);
Flags.quit_ff = 1;
}
return (ptr);
}
/*
* MyFileAllocRem() reserviert Speicher aus einer Remember-Liste
* für die Datei-Einträge
*/
static void *
MyFileAllocRem (long size)
{
void *ptr = (void *) AllocRemember (FILEKEY, size, MEMF_CLEAR | MEMF_ANY);
if (NOT (ptr))
{
ErrorHandle ("File list", MEMORY_ERR, ALLOC_FAIL, NO_KILL);
Flags.quit_ff = 1;
}
return (ptr);
}
/*
* refreshdevlists() erneuert die Anzeige der ListViews mit den
* Inhalten der Listen der selektierten und der nicht selektierten
* Devices
*/
static void
refreshdevlists (void)
{
InitListView (FindFileWnd, FindFileGadgets[GD_DeviceLV - GD_DeviceLV], &DevList, UNSETLVPOS);
InitListView (FindFileWnd, FindFileGadgets[GD_SelDevLV - GD_DeviceLV], &SelDevList, UNSETLVPOS);
return;
}
/*
* MakeDevEntry() erzeugt einen neuen Listeneintrag in die
* Liste der Devices
*/
void
MakeDevEntry (LIST * list, char *str)
{
NODE *node = MyDevAllocRem (sizeof (NODE));
if (NOT (node))
return;
node->ln_Pri = 0;
node->ln_Type = NT_USER;
node->ln_Name = MyDevAllocRem (strlen (str) + 1);
if (NOT (node->ln_Name))
return;
strcpy (node->ln_Name, str);
AddNodeSorted (list, node, 0);
return;
}
/*
* MakeFileEntry() erzeugt einen Listeneintrag in die Liste der
* gefundenen Dateien. Der Eintrag wird dann in die bestehende
* Liste alphabetisch einsortiert
*/
static void
MakeFileEntry (char *str)
{
NODE *node = MyFileAllocRem (sizeof (NODE));
if (NOT (node))
return;
node->ln_Pri = 0;
node->ln_Type = NT_USER;
node->ln_Name = MyDevAllocRem (strlen (str) + 1);
if (NOT (node->ln_Name))
return;
strcpy (node->ln_Name, str);
AddNodeSorted (&FoundList, node, 0);
InitListView (FindFileWnd, FindFileGadgets[GD_FoundLV - GD_DeviceLV], &FoundList, UNSETLVPOS);
return;
}
/*
* MakeDevList() erzeugt eine Liste aus angemeldeten Devices
* (Volumes) und Assigns. Die Devices werden der Reihe nach
* ausgelesen und in die Liste einsortiert. Assigns werden mit
* einem führenden "-" versehen, damit sie in der Liste
* unterschieden werden können
*/
static void
MakeDevList (void)
{
char dev[80], str[100];
DOSLIST *dl;
dl = LockDosList (LDF_VOLUMES | LDF_READ);
while (dl = NextDosEntry (dl, LDF_VOLUMES | LDF_READ))
{
sprintf (str, " %s:", B2CStr (dev, dl->dol_Name));
MakeDevEntry (&DevList, str);
}
UnLockDosList (LDF_VOLUMES | LDF_READ);
dl = LockDosList (LDF_ASSIGNS | LDF_READ);
while (dl = NextDosEntry (dl, LDF_ASSIGNS | LDF_READ))
{
sprintf (str, "\-%s:", B2CStr (dev, dl->dol_Name));
MakeDevEntry (&DevList, str);
}
UnLockDosList (LDF_ASSIGNS | LDF_READ);
return;
}
/*
* ClickedGadget() prüft, ob das Start/Stop-Gadget betätigt
* wurde. Mit einem AutoRequester wird nachgefragt, ob die
* Suche nach Dateien eingestellt werden soll
*/
static BOOL
ClickedGadget (void)
{
INTUIMESSAGE *mess;
ULONG class;
APTR adr;
BOOL ret = FALSE;
while ((mess = (INTUIMESSAGE *) GT_GetIMsg (FindFileWnd->UserPort)) != NULL)
{
class = mess->Class;
adr = mess->IAddress;
GT_ReplyIMsg (mess);
switch (class)
{
case IDCMP_CHANGEWINDOW:
case IDCMP_REFRESHWINDOW:
RefreshRastPort (FindFileWnd, FindFileGadgets, gl, 4, TRUE, NULL);
MakeWindowRefresh (FindFileWnd);
break;
case IDCMP_GADGETUP:
if ((adr == (APTR) FindFileGadgets[GD_StartStopGad - GD_DeviceLV]) &&
Question (FindFileWnd, "Do you want to cancel searching?", YES))
{
ret = TRUE;
breakitx = TRUE;
}
break;
}
}
return ret;
}
/*
* SearchFile() wird rekursiv mit dem dem Namen eines
* Verzeichnisses oder Devices aufgerufen. Es durchsucht dann
* alle Verzeichnisse nach vorgegebenem Suchmuster. Die
* gefundenen Einträge werden in die entsprechenden Listen
* eingetragen
*/
static void
SearchFile (char *name)
{
EXALLCONTROL *eac;
EXALLDATA *EAData, *ead;
int more;
BPTR lock;
UBYTE newdir[MAXFULLNAME], foundname[MAXFULLNAME];
BOOL (*matchfunc[2]) (UBYTE *, UBYTE *) =
{
MatchPatternNoCase, MatchPattern
};
if (ClickedGadget () || breakitx || Flags.quit_ff)
return;
if (NOT (lock = Lock ((UBYTE *) name, ACCESS_READ)))
return;
if (eac = AllocDosObject (DOS_EXALLCONTROL, NULL))
{
eac->eac_LastKey = 0;
EAData = MyAllocVec ((MAXLARGEMEM + 1) * sizeof (EXALLDATA),
MEMF_ANY | MEMF_CLEAR, NO_KILL);
if (EAData)
{
do
{
more = ExAll (lock, EAData, MAXLARGEMEM * sizeof (EXALLDATA),
ED_SIZE, eac);
if ((!more) && (IoErr () != ERROR_NO_MORE_ENTRIES))
{
ErrorHandle (name, DOS_EXALL_ERR, EXALL_FAIL, NO_KILL);
break;
}
if (eac->eac_Entries == 0)
continue;
ead = EAData;
do
{
if ((*matchfunc[match_case]) ((UBYTE *) parsepat,
FilePart ((UBYTE *) ead->ed_Name)))
{
strncpy ((char *) foundname, name, MAXFULLNAME);
if (AddPart (foundname, ead->ed_Name, MAXFULLNAME))
{
if (ead->ed_Type > 0)
strcat ((char *) foundname, " (dir)");
if ((match_type == DF) || ((match_type == FI) && (ead->ed_Type <= 0)) ||
((match_type == DI) && (ead->ed_Type > 0)))
MakeFileEntry ((char *) foundname);
}
}
if (ead->ed_Type > 0)
{
strncpy ((char *) newdir, name, MAXFULLNAME);
if (AddPart (newdir, ead->ed_Name, MAXFULLNAME))
SearchFile ((char *) newdir);
}
ead = ead->ed_Next;
}
while (ead && NOT (ClickedGadget ()) && NOT (breakitx) && NOT (Flags.quit_ff));
}
while (more);
MyFreeVec (EAData);
}
FreeDosObject (DOS_EXALLCONTROL, eac);
}
else
ErrorHandle ("ExAll()-Control", MEMORY_ERR, ALLOC_FAIL, NO_KILL);
UnLock (lock);
return;
}
/*
* SaveFoundFiles() speichert die Liste mit den gefunden
* Dateien und Verzeichnissen in einer Datei ab
*/
static void
SaveFoundFiles (void)
{
char head[PARSEPATLEN];
if (GetFile (FindFileWnd, "RAM:", "RSys-FoundFiles.DAT", "#?.DAT",
"Select File for saving list", "Save"))
{
sprintf (head, "Found files (Pattern: %s)", pat);
SaveList (FindFileWnd, (char *) _fullpath, head, &FoundList, FALSE);
}
return;
}
static void
HandleFindFileGadgets (APTR object, ULONG code)
{
NODE *clicknode, *node, *remnode;
int ID, i;
LONG (*parse_func[2]) (UBYTE *, UBYTE *, long) =
{
ParsePatternNoCase, ParsePattern
};
DPOS;
ID = ((GADGET *) object)->GadgetID;
HandleHelp ((enum RSysNumbers) ID);
switch (ID)
{
case GD_DeviceLV:
clicknode = GetNode (&DevList, code);
Remove (clicknode);
AddTail (&SelDevList, clicknode);
refreshdevlists ();
if (strlen (pat))
EnableGadget (FindFileWnd, FindFileGadgets[GD_StartStopGad - GD_DeviceLV], TRUE);
break;
case GD_SelDevLV:
clicknode = GetNode (&SelDevList, code);
Remove (clicknode);
AddNodeSorted (&DevList, clicknode, 0);
refreshdevlists ();
if (IsListEmpty (&SelDevList))
EnableGadget (FindFileWnd, FindFileGadgets[GD_StartStopGad - GD_DeviceLV], FALSE);
break;
case GD_PatternGad:
strncpy (pat, gadgetbuff (FindFileGadgets[GD_PatternGad - GD_DeviceLV]), PATTERNLEN);
if (strlen (pat) == 0)
EnableGadget (FindFileWnd, FindFileGadgets[GD_StartStopGad - GD_DeviceLV], FALSE);
else if ((*parse_func[match_case]) ((UBYTE *) pat, (UBYTE *) parsepat, 162) < 0)
EnableGadget (FindFileWnd, FindFileGadgets[GD_StartStopGad - GD_DeviceLV], FALSE);
else if (NOT (IsListEmpty (&SelDevList)))
EnableGadget (FindFileWnd, FindFileGadgets[GD_StartStopGad - GD_DeviceLV], TRUE);
break;
case GD_StartStopGad:
if (NOT (IsListEmpty (&SelDevList)))
{
if (NOT (IsListEmpty (&FoundList)) && Question (FindFileWnd, "File list not empty!\n"
"Do you want to save it?", NO))
SaveFoundFiles ();
InitListView (FindFileWnd, FindFileGadgets[GD_FoundLV - GD_DeviceLV], NULL, 0);
FreeRemember (FILEKEY, TRUE);
NewList (&FoundList);
InitListView (FindFileWnd, FindFileGadgets[GD_FoundLV - GD_DeviceLV], &FoundList, UNSETLVPOS);
for (i = GD_DeviceLV; i <= GD_DirFileCYGad; i++)
if ((i != GD_StartStopGad) && (i != GD_FoundLV))
EnableGadget (FindFileWnd, FindFileGadgets[i - GD_DeviceLV], FALSE);
breakitx = FALSE;
for (node = SelDevList.lh_Head; node->ln_Succ; node = node->ln_Succ)
SearchFile (&(node->ln_Name)[1]);
for (i = GD_DeviceLV; i <= GD_DirFileCYGad; i++)
if ((i != GD_StartStopGad) && (i != GD_FoundLV))
EnableGadget (FindFileWnd, FindFileGadgets[i - GD_DeviceLV], TRUE);
}
break;
case GD_SaveFoundListGad:
if (NOT (IsListEmpty (&FoundList)))
SaveFoundFiles ();
break;
case GD_AllGad:
if (IsListEmpty (&DevList))
break;
node = DevList.lh_Head;
while (node->ln_Succ)
{
remnode = node->ln_Succ;
Remove (node);
AddTail (&SelDevList, node);
node = remnode;
}
InitListView (FindFileWnd, FindFileGadgets[GD_DeviceLV - GD_DeviceLV], NULL, 0);
NewList (&DevList);
refreshdevlists ();
if (strlen (pat))
EnableGadget (FindFileWnd, FindFileGadgets[GD_StartStopGad - GD_DeviceLV], TRUE);
break;
case GD_NoneGad:
if (IsListEmpty (&SelDevList))
break;
node = SelDevList.lh_Head;
while (node->ln_Succ)
{
remnode = node->ln_Succ;
Remove (node);
AddNodeSorted (&DevList, node, 0);
node = remnode;
}
InitListView (FindFileWnd, FindFileGadgets[GD_SelDevLV - GD_DeviceLV], NULL, 0);
NewList (&SelDevList);
refreshdevlists ();
EnableGadget (FindFileWnd, FindFileGadgets[GD_StartStopGad - GD_DeviceLV], FALSE);
break;
case GD_CaseCYGad:
match_case = ((match_case == CASE) ? NO_CASE : CASE);
if (strlen (pat) == 0)
EnableGadget (FindFileWnd, FindFileGadgets[GD_StartStopGad - GD_DeviceLV], FALSE);
else if ((*parse_func[match_case]) ((UBYTE *) pat, (UBYTE *) parsepat, 162) < 0)
EnableGadget (FindFileWnd, FindFileGadgets[GD_StartStopGad - GD_DeviceLV], FALSE);
else
EnableGadget (FindFileWnd, FindFileGadgets[GD_StartStopGad - GD_DeviceLV], TRUE);
break;
case GD_DirFileCYGad:
match_type = code;
break;
}
return;
}
void
HandleFindFileKeys (ULONG code)
{
if (code == ESC)
{
if (NOT (IsListEmpty (&FoundList)) && Question (FindFileWnd, "File list not empty!\n"
"Do you want to save it?", NO))
SaveFoundFiles ();
Flags.quit_ff = 1;
}
return;
}
/*
* FindFile() präsentiert eine Benutzeroberfläche, mit der die
* Suchkriterien eingestellt und das Handling gemanagt wird
*/
void
FindFile (void)
{
INTUIMESSAGE *message;
ULONG class, code;
APTR object;
static int refr = TRUE;
DPOS;
HandleHelp (MN_FindFile);
NewList (&DevList);
NewList (&SelDevList);
NewList (&FoundList);
Flags.quit_ff = 0;
if (OpenASysWindow (OpenFindFileWindow, NO_KILL))
{
LockMainWindow (WIN_LOCK);
MakeDevList ();
InitListView (FindFileWnd, FindFileGadgets[GD_DeviceLV - GD_DeviceLV], &DevList, UNSETLVPOS);
do
{
Wait (1L << FindFileWnd->UserPort->mp_SigBit);
while ((message = (INTUIMESSAGE *) GT_GetIMsg (FindFileWnd->UserPort)) != NULL)
{
object = message->IAddress;
class = message->Class;
code = message->Code;
GT_ReplyIMsg (message);
switch (class)
{
case IDCMP_GADGETUP:
HandleFindFileGadgets (object, code);
break;
case IDCMP_VANILLAKEY:
HandleFindFileKeys (code);
break;
case IDCMP_CHANGEWINDOW:
case IDCMP_REFRESHWINDOW:
if (NOT (FindFileWnd->Flags & WFLG_ZOOMED))
{
/*
* Das Fenster soll nur EINMAL refreshed werden.
* Diese IDCMP-Message kommt aber auch dann, wenn ein
* Fenster verschoben wurde, weshalb ein Flag extra
* eingeführt wurde.
*/
if (NOT (refr))
{
RefreshRastPort (FindFileWnd, FindFileGadgets, gl, 4, TRUE, NULL);
refr = TRUE;
}
}
else
refr = FALSE;
MakeWindowRefresh (FindFileWnd);
break;
case IDCMP_CLOSEWINDOW:
if (NOT (IsListEmpty (&FoundList)) && Question (FindFileWnd, "File list not empty!\n"
"Do you want to save it?", NO))
SaveFoundFiles ();
Flags.quit_ff = 1;
break;
}
}
}
while (NOT (Flags.quit_ff));
FreeRemember (FILEKEY, TRUE);
FreeRemember (DEVKEY, TRUE);
CloseASysWindow (&FindFileWnd, &FindFileGList, NULL);
LockMainWindow (WIN_UNLOCK);
}
return;
}